home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_CriticalStaticMultiOwned.h < prev    next >
C/C++ Source or Header  |  2000-04-07  |  8KB  |  204 lines

  1. #ifndef CB_CRITICAL_MULTI_STATIC_OWNED_H
  2. #define CB_CRITICAL_MULTI_STATIC_OWNED_H
  3.  
  4. #include "CB_CriticalStaticMulti.h"
  5. #include "CB_StaticMultiOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  9. public:\
  10.     static ClassTo* _first##NameTo;\
  11.     static ClassTo* _last##NameTo;\
  12.     static int _count##NameTo;\
  13. \
  14. public:\
  15.     static CriticalSection _criticalSection##NameTo;\
  16. \
  17. protected:\
  18.     static void Add##NameTo##First(ClassTo* item);\
  19.     static void Add##NameTo##Last(ClassTo* item);\
  20.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  21.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  22.     static void Remove##NameTo(ClassTo* item);\
  23.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  24. \
  25. public:\
  26.     static void DeleteAll##NameTo();\
  27.     static ClassTo* GetFirst##NameTo();\
  28.     static ClassTo* GetLast##NameTo();\
  29.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  30.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  31.     static int Get##NameTo##Count();\
  32.     static void Move##NameTo##First(ClassTo* item);\
  33.     static void Move##NameTo##Last(ClassTo* item);\
  34.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  35.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  36.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  37.     ITERATOR_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  38.  
  39. #define RELATION_NOFILTER_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  40. public:\
  41.     static ClassTo* _first##NameTo;\
  42.     static ClassTo* _last##NameTo;\
  43.     static int _count##NameTo;\
  44. \
  45. public:\
  46.     static CriticalSection _criticalSection##NameTo;\
  47. \
  48. protected:\
  49.     static void Add##NameTo##First(ClassTo* item);\
  50.     static void Add##NameTo##Last(ClassTo* item);\
  51.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  52.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  53.     static void Remove##NameTo(ClassTo* item);\
  54.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  55. \
  56. public:\
  57.     static void DeleteAll##NameTo();\
  58.     static ClassTo* GetFirst##NameTo();\
  59.     static ClassTo* GetLast##NameTo();\
  60.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  61.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  62.     static int Get##NameTo##Count();\
  63.     static void Move##NameTo##First(ClassTo* item);\
  64.     static void Move##NameTo##Last(ClassTo* item);\
  65.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  66.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  67.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  68.     ITERATOR_NOFILTER_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  69.  
  70. #define RELATION_CRITICAL_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71.     RELATION_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  72.  
  73. // defines implementation
  74. #define INIT_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  75.  
  76. #define EXIT_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  77.  
  78. #define REPLACE_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  79.  
  80. #define INIT_CRITICAL_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  81. {\
  82.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  83.     INIT_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  84. }
  85.  
  86. #define EXIT_CRITICAL_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  87. {\
  88.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  89.     EXIT_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  90. }
  91.  
  92. #define REPLACE_CRITICAL_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  93. {\
  94.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  95.     REPLACE_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  96. }
  97.  
  98. #define METHODS_CRITICAL_STATIC_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  99.     ClassTo* ClassFrom##::_first##NameTo = (ClassTo*)0;\
  100.     ClassTo* ClassFrom##::_last##NameTo = (ClassTo*)0;\
  101.     int ClassFrom##::_count##NameTo = 0;\
  102.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  103. void ClassFrom##::Add##NameTo##First(ClassTo* item)\
  104. {\
  105.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  106.     METHOD_STATIC_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  107. }\
  108. \
  109. void ClassFrom##::Add##NameTo##Last(ClassTo* item)\
  110. {\
  111.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  112.     METHOD_STATIC_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  113. }\
  114. \
  115. void ClassFrom##::Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  116. {\
  117.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  118.     METHOD_STATIC_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  119. }\
  120. \
  121. void ClassFrom##::Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  122. {\
  123.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  124.     METHOD_STATIC_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  125. }\
  126. \
  127. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  128. {\
  129.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  130.     METHOD_STATIC_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  131. }\
  132. \
  133. void ClassFrom##::DeleteAll##NameTo()\
  134. {\
  135.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  136.     METHOD_STATIC_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  137. }\
  138. \
  139. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  140. {\
  141.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  142.     METHOD_STATIC_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  143. }\
  144. \
  145. ClassTo* ClassFrom##::GetFirst##NameTo()\
  146. {\
  147.     METHOD_STATIC_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  148. }\
  149. \
  150. ClassTo* ClassFrom##::GetLast##NameTo()\
  151. {\
  152.     METHOD_STATIC_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  153. }\
  154. \
  155. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  156. {\
  157.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  158.     METHOD_STATIC_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  159. }\
  160. \
  161. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  162. {\
  163.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  164.     METHOD_STATIC_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  165. }\
  166. \
  167. int ClassFrom##::Get##NameTo##Count()\
  168. {\
  169.     METHOD_STATIC_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  170. }\
  171. \
  172. void ClassFrom##::Move##NameTo##First(ClassTo* item)\
  173. {\
  174.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  175.     METHOD_STATIC_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  176. }\
  177. \
  178. void ClassFrom##::Move##NameTo##Last(ClassTo* item)\
  179. {\
  180.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  181.     METHOD_STATIC_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  182. }\
  183. \
  184. void ClassFrom##::Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  185. {\
  186.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  187.     METHOD_STATIC_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  188. }\
  189. \
  190. void ClassFrom##::Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  191. {\
  192.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  193.     METHOD_STATIC_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  194. }\
  195. \
  196. void ClassFrom##::Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
  197. {\
  198.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  199.     METHOD_STATIC_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  200. }
  201.  
  202. #define METHODS_CRITICAL_STATIC_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  203.  
  204. #endif